package service

import (
	"context"
	"github.com/star-find-cloud/star-chat/user/domain"
	"time"
)

type UserService interface {
	// Create 测试专用函数, 正式创建使用 Register
	Create(ctx context.Context, user *domain.User) (int64, error)
	// Register 注册用户
	Register(ctx context.Context, user *domain.User) (string, int64, error)

	// Get 获取用户所有信息
	Get(ctx context.Context, id int64) (*domain.User, error)
	// GetByID 通过用户ID获取非敏感信息
	GetByID(ctx context.Context, id int64) (*domain.User, error)
	// GetByEmail 通过用户邮箱获取非敏感信息
	GetByEmail(ctx context.Context, email string) (*domain.User, error)
	// GetByPhone 通过用户手机号码获取非敏感信息
	GetByPhone(ctx context.Context, phone int64) (*domain.User, error)
	// Login 登录
	Login(ctx context.Context, id, phone, countryCode int64, email, password string) (*domain.User, error)

	// Update 修改用户信息
	Update(ctx context.Context, user *domain.User) error
	// UpdatePassword 修改用户密码
	UpdatePassword(ctx context.Context, id int64, newPassword, oldPassword string) error
	// UpdatePhone 修改用户手机号码
	UpdatePhone(ctx context.Context, id, phone, countryCode int64) error
	// ForgetPassword 忘记密码
	ForgetPassword(ctx context.Context, phone int64, email, password string) error
	// BannedUser 封禁用户
	BannedUser(ctx context.Context, id int64, time time.Time) error

	// Delete 删除用户
	Delete(ctx context.Context, id int64) error

	// IsExistsByID 通过ID判断用户是否存在
	IsExistsByID(ctx context.Context, id int64) (bool, error)
	// IsExistsByPhone 通过手机号码判断用户是否存在
	IsExistsByPhone(ctx context.Context, phone int64) (bool, error)
	// IsExistsByEmail 通过邮箱判断用户是否存在+
	IsExistsByEmail(ctx context.Context, email string) (bool, error)

	// CheckEmailVerificationCode 验证邮箱验证码
	CheckEmailVerificationCode(ctx context.Context, email string, verificationCode string) (bool, error)
}
